home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / !Interfaces / Universal Interfaces 2.0a1 / PInterfaces / Power.p < prev    next >
Encoding:
Text File  |  1994-07-17  |  11.4 KB  |  393 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        Power.p
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a1.  ETO #15, MPW prerelease.  Sunday, July 17, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. }
  16.  
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT Power;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __POWER__}
  27. {$SETC __POWER__ := 1}
  28.  
  29. {$I+}
  30. {$SETC PowerIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {    ConditionalMacros.p                                            }
  38.  
  39. {$IFC UNDEFINED __MIXEDMODE__}
  40. {$I MixedMode.p}
  41. {$ENDC}
  42.  
  43. {$PUSH}
  44. {$ALIGN MAC68K}
  45. {$LibExport+}
  46.  
  47. CONST
  48. { Bit positions for ModemByte }
  49.     modemOnBit                    = 0;
  50.     ringWakeUpBit                = 2;
  51.     modemInstalledBit            = 3;
  52.     ringDetectBit                = 4;
  53.     modemOnHookBit                = 5;
  54. { masks for ModemByte }
  55.     modemOnMask                    = $1;
  56.     ringWakeUpMask                = $4;
  57.     modemInstalledMask            = $8;
  58.     ringDetectMask                = $10;
  59.     modemOnHookMask                = $20;
  60. { bit positions for BatteryByte }
  61.     chargerConnBit                = 0;
  62.     hiChargeBit                    = 1;
  63.     chargeOverFlowBit            = 2;
  64.     batteryDeadBit                = 3;
  65.     batteryLowBit                = 4;
  66.     connChangedBit                = 5;
  67. { masks for BatteryByte }
  68.     chargerConnMask                = $1;
  69.     hiChargeMask                = $2;
  70.     chargeOverFlowMask            = $4;
  71.     batteryDeadMask                = $8;
  72.  
  73.     batteryLowMask                = $10;
  74.     connChangedMask                = $20;
  75. { commands to SleepQRec sleepQProc }
  76.     sleepRequest                = 1;
  77.     sleepDemand                    = 2;
  78.     sleepWakeUp                    = 3;
  79.     sleepRevoke                    = 4;
  80. { SleepQRec.sleepQFlags }
  81.     noCalls                        = 1;
  82.     noRequest                    = 2;
  83.     slpQType                    = 16;
  84.     sleepQType                    = 16;
  85.  
  86. { bits in bitfield returned by PMFeatures }
  87.     hasWakeupTimer                = 0;                            { 1=wakeup timer is supported                        }
  88.     hasSharedModemPort            = 1;                            { 1=modem port shared by SCC and internal modem    }
  89.     hasProcessorCycling            = 2;                            { 1=processor cycling is supported                    }
  90.     mustProcessorCycle            = 3;                            { 1=processor cycling should not be turned off        }
  91.     hasReducedSpeed                = 4;                            { 1=processor can be started up at reduced speed    }
  92.     dynamicSpeedChange            = 5;                            { 1=processor speed can be switched dynamically    }
  93.     hasSCSIDiskMode                = 6;                            { 1=SCSI Disk Mode is supported                    }
  94.     canGetBatteryTime            = 7;                            { 1=battery time can be calculated                    }
  95.     canWakeupOnRing                = 8;                            { 1=can wakeup when the modem detects a ring        }
  96.     hasDimmingSupport            = 9;                            { 1 has dimming support built into the rom            }
  97.  
  98. { bits in bitfield returned by GetIntModemInfo and set by SetIntModemState }
  99.     hasInternalModem            = 0;                            { 1=internal modem installed                        }
  100.     intModemRingDetect            = 1;                            { 1=internal modem has detected a ring                }
  101.     intModemOffHook                = 2;                            { 1=internal modem is off hook                        }
  102.     intModemRingWakeEnb            = 3;                            { 1=wakeup on ring is enabled                        }
  103.     extModemSelected            = 4;                            { 1=external modem selected                        }
  104.     modemSetBit                    = 15;                            { 1=set bit, 0=clear bit (SetIntModemState)        }
  105.  
  106. { bits in BatteryInfo.flags                                     }
  107. { ("chargerConnected" doesn't mean the charger is plugged in)    }
  108.     batteryInstalled            = 7;                            { 1=battery is currently connected                    }
  109.     batteryCharging                = 6;                            { 1=battery is being charged                        }
  110.     chargerConnected            = 5;                            { 1=charger is connected to the PowerBook            }
  111.  
  112.     HDPwrQType                    = 'HD';
  113.  
  114. { information returned by GetScaledBatteryInfo }
  115.  
  116. TYPE
  117.     BatteryInfo = PACKED RECORD
  118.         flags:                    UInt8;                                    { misc flags (see below)                            }
  119.         warningLevel:            UInt8;                                    { scaled warning level (0-255)                        }
  120.         reserved:                UInt8;                                    { reserved for internal use                        }
  121.         batteryLevel:            UInt8;                                    { scaled battery level (0-255)                        }
  122.     END;
  123.     ModemByte = SInt8;
  124.  
  125.     BatteryByte = SInt8;
  126.  
  127.     PMResultCode = LONGINT;
  128.  
  129.     SleepQRecPtr = ^SleepQRec;
  130.  
  131.     HDSpindownProcPtr = ProcPtr;  { PROCEDURE HDSpindown(VAR theElement: HDQueueElement); }
  132.     {
  133.         SleepQProcPtr uses register based parameters on the 68k and cannot
  134.         be written in or called from a high-level language without the help of
  135.         mixed mode or assembly glue.
  136.  
  137.         In:
  138.          => message         D0.L
  139.          => qRecPtr         A0.L
  140.         Out:
  141.          <= return value    D0.L
  142.     }
  143.     SleepQProcPtr = ProcPtr;  { FUNCTION SleepQ(message: LONGINT; qRecPtr: SleepQRecPtr): LONGINT; }
  144.     HDSpindownUPP = UniversalProcPtr;
  145.     SleepQUPP = UniversalProcPtr;
  146.  
  147.     HDQueueElement = RECORD
  148.         hdQLink:                Ptr;                                    { pointer to next queue element                    }
  149.         hdQType:                INTEGER;                                { queue element type (must be HDQType)                }
  150.         hdFlags:                INTEGER;                                { miscellaneous flags                                }
  151.         hdProc:                    HDSpindownUPP;                            { pointer to routine to call                        }
  152.         hdUser:                    LONGINT;                                { user-defined (variable storage, etc.)            }
  153.     END;
  154.     SleepQRec = RECORD
  155.         sleepQLink:                ^SleepQRec;
  156.         sleepQType:                INTEGER;                                { type = 16                            }
  157.         sleepQProc:                SleepQUPP;                                { Pointer to sleep universal proc ptr    }
  158.         sleepQFlags:            INTEGER;
  159.     END;
  160. { wakeup time record }
  161.     WakeupTime = RECORD
  162.         wakeTime:                LONGINT;                                { wakeup time (same format as current time)        }
  163.         wakeEnabled:            BOOLEAN;                                { 1=enable wakeup timer, 0=disable wakeup timer    }
  164.     END;
  165. { battery time information (in seconds) }
  166.     BatteryTimeRec = RECORD
  167.         expectedBatteryTime:    LONGINT;                                { estimated battery time remaining                }
  168.         minimumBatteryTime:        LONGINT;                                { minimum battery time remaining                }
  169.         maximumBatteryTime:        LONGINT;                                { maximum battery time remaining                }
  170.         timeUntilCharged:        LONGINT;                                { time until battery is fully charged            }
  171.     END;
  172.  
  173. FUNCTION DisableWUTime: OSErr;
  174. FUNCTION SetWUTime(WUTime: LONGINT): OSErr;
  175. FUNCTION GetWUTime(VAR WUTime: LONGINT; VAR WUFlag: SignedByte): OSErr;
  176. FUNCTION BatteryStatus(VAR Status: SignedByte; VAR Power: SignedByte): OSErr;
  177. FUNCTION ModemStatus(VAR Status: SignedByte): OSErr;
  178. FUNCTION IdleUpdate: LONGINT;
  179.     {$IFC NOT GENERATINGCFM}
  180.     INLINE $A285, $2E80;
  181.     {$ENDC}
  182. FUNCTION GetCPUSpeed: LONGINT;
  183.     {$IFC NOT GENERATINGCFM}
  184.     INLINE $70FF, $A485, $2E80;
  185.     {$ENDC}
  186. PROCEDURE EnableIdle;
  187.     {$IFC NOT GENERATINGCFM}
  188.     INLINE $7000, $A485;
  189.     {$ENDC}
  190. PROCEDURE DisableIdle;
  191.     {$IFC NOT GENERATINGCFM}
  192.     INLINE $7001, $A485;
  193.     {$ENDC}
  194. PROCEDURE SleepQInstall(qRecPtr: SleepQRecPtr);
  195.     {$IFC NOT GENERATINGCFM}
  196.     INLINE $205F, $A28A;
  197.     {$ENDC}
  198. PROCEDURE SleepQRemove(qRecPtr: SleepQRecPtr);
  199.     {$IFC NOT GENERATINGCFM}
  200.     INLINE $205F, $A48A;
  201.     {$ENDC}
  202. PROCEDURE AOn;
  203.     {$IFC NOT GENERATINGCFM}
  204.     INLINE $7004, $A685;
  205.     {$ENDC}
  206. PROCEDURE AOnIgnoreModem;
  207.     {$IFC NOT GENERATINGCFM}
  208.     INLINE $7005, $A685;
  209.     {$ENDC}
  210. PROCEDURE BOn;
  211.     {$IFC NOT GENERATINGCFM}
  212.     INLINE $7000, $A685;
  213.     {$ENDC}
  214. PROCEDURE AOff;
  215.     {$IFC NOT GENERATINGCFM}
  216.     INLINE $7084, $A685;
  217.     {$ENDC}
  218. PROCEDURE BOff;
  219.     {$IFC NOT GENERATINGCFM}
  220.     INLINE $7080, $A685;
  221.     {$ENDC}
  222. { Newer PowerMgr functions }
  223. FUNCTION PMSelectorCount: INTEGER;
  224.     {$IFC NOT GENERATINGCFM}
  225.     INLINE $7000, $A09E, $3E80;
  226.     {$ENDC}
  227. FUNCTION PMFeatures: LONGINT;
  228.     {$IFC NOT GENERATINGCFM}
  229.     INLINE $7001, $A09E, $2E80;
  230.     {$ENDC}
  231. FUNCTION GetSleepTimeout: UInt8;
  232.     {$IFC NOT GENERATINGCFM}
  233.     INLINE $7002, $A09E, $1E80;
  234.     {$ENDC}
  235. PROCEDURE SetSleepTimeout(timeout: ByteParameter);
  236.     {$IFC NOT GENERATINGCFM}
  237.     INLINE $101F, $4840, $303C, $0003, $A09E;
  238.     {$ENDC}
  239. FUNCTION GetHardDiskTimeout: UInt8;
  240.     {$IFC NOT GENERATINGCFM}
  241.     INLINE $7004, $A09E, $1E80;
  242.     {$ENDC}
  243. PROCEDURE SetHardDiskTimeout(timeout: ByteParameter);
  244.     {$IFC NOT GENERATINGCFM}
  245.     INLINE $101F, $4840, $303C, $0005, $A09E;
  246.     {$ENDC}
  247. FUNCTION HardDiskPowered: BOOLEAN;
  248.     {$IFC NOT GENERATINGCFM}
  249.     INLINE $7006, $A09E, $1E80;
  250.     {$ENDC}
  251. PROCEDURE SpinDownHardDisk;
  252.     {$IFC NOT GENERATINGCFM}
  253.     INLINE $7007, $A09E;
  254.     {$ENDC}
  255. FUNCTION IsSpindownDisabled: BOOLEAN;
  256.     {$IFC NOT GENERATINGCFM}
  257.     INLINE $7008, $A09E, $1E80;
  258.     {$ENDC}
  259. PROCEDURE SetSpindownDisable(setDisable: BOOLEAN);
  260.     {$IFC NOT GENERATINGCFM}
  261.     INLINE $101F, $4840, $303C, $0009, $A09E;
  262.     {$ENDC}
  263. FUNCTION HardDiskQInstall(VAR theElement: HDQueueElement): OSErr;
  264.     {$IFC NOT GENERATINGCFM}
  265.     INLINE $205F, $700A, $A09E, $3E80;
  266.     {$ENDC}
  267. FUNCTION HardDiskQRemove(VAR theElement: HDQueueElement): OSErr;
  268.     {$IFC NOT GENERATINGCFM}
  269.     INLINE $205F, $700B, $A09E, $3E80;
  270.     {$ENDC}
  271. PROCEDURE GetScaledBatteryInfo(whichBattery: INTEGER; VAR theInfo: BatteryInfo);
  272.     {$IFC NOT GENERATINGCFM}
  273.     INLINE $205F, $301F, $4840, $303C, $000C, $A09E, $2080;
  274.     {$ENDC}
  275. PROCEDURE AutoSleepControl(enableSleep: BOOLEAN);
  276.     {$IFC NOT GENERATINGCFM}
  277.     INLINE $101F, $4840, $303C, $000D, $A09E;
  278.     {$ENDC}
  279. FUNCTION GetIntModemInfo: LONGINT;
  280.     {$IFC NOT GENERATINGCFM}
  281.     INLINE $700E, $A09E, $2E80;
  282.     {$ENDC}
  283. PROCEDURE SetIntModemState(theState: INTEGER);
  284.     {$IFC NOT GENERATINGCFM}
  285.     INLINE $301F, $4840, $303C, $000F, $A09E;
  286.     {$ENDC}
  287. FUNCTION MaximumProcessorSpeed: INTEGER;
  288.     {$IFC NOT GENERATINGCFM}
  289.     INLINE $7010, $A09E, $3E80;
  290.     {$ENDC}
  291. FUNCTION CurrentProcessorSpeed: INTEGER;
  292.     {$IFC NOT GENERATINGCFM}
  293.     INLINE $7011, $A09E, $3E80;
  294.     {$ENDC}
  295. FUNCTION FullProcessorSpeed: BOOLEAN;
  296.     {$IFC NOT GENERATINGCFM}
  297.     INLINE $7012, $A09E, $1E80;
  298.     {$ENDC}
  299. FUNCTION SetProcessorSpeed(fullSpeed: BOOLEAN): BOOLEAN;
  300.     {$IFC NOT GENERATINGCFM}
  301.     INLINE $101F, $4840, $303C, $0013, $A09E, $1E80;
  302.     {$ENDC}
  303. FUNCTION GetSCSIDiskModeAddress: INTEGER;
  304.     {$IFC NOT GENERATINGCFM}
  305.     INLINE $7014, $A09E, $3E80;
  306.     {$ENDC}
  307. PROCEDURE SetSCSIDiskModeAddress(scsiAddress: INTEGER);
  308.     {$IFC NOT GENERATINGCFM}
  309.     INLINE $301F, $4840, $303C, $0015, $A09E;
  310.     {$ENDC}
  311. PROCEDURE GetWakeupTimer(VAR theTime: WakeupTime);
  312.     {$IFC NOT GENERATINGCFM}
  313.     INLINE $205F, $7016, $A09E;
  314.     {$ENDC}
  315. PROCEDURE SetWakeupTimer(VAR theTime: WakeupTime);
  316.     {$IFC NOT GENERATINGCFM}
  317.     INLINE $205F, $7017, $A09E;
  318.     {$ENDC}
  319. FUNCTION IsProcessorCyclingEnabled: BOOLEAN;
  320.     {$IFC NOT GENERATINGCFM}
  321.     INLINE $7018, $A09E, $1E80;
  322.     {$ENDC}
  323. PROCEDURE EnableProcessorCycling(enable: BOOLEAN);
  324.     {$IFC NOT GENERATINGCFM}
  325.     INLINE $101F, $4840, $303C, $0019, $A09E;
  326.     {$ENDC}
  327. FUNCTION BatteryCount: INTEGER;
  328.     {$IFC NOT GENERATINGCFM}
  329.     INLINE $701A, $A09E, $3E80;
  330.     {$ENDC}
  331. FUNCTION GetBatteryVoltage(whichBattery: INTEGER): Fixed;
  332.     {$IFC NOT GENERATINGCFM}
  333.     INLINE $301F, $4840, $303C, $001B, $A09E, $2E80;
  334.     {$ENDC}
  335. PROCEDURE GetBatteryTimes(whichBattery: INTEGER; VAR theTimes: BatteryTimeRec);
  336.     {$IFC NOT GENERATINGCFM}
  337.     INLINE $205F, $301F, $4840, $303C, $001C, $A09E;
  338.     {$ENDC}
  339. FUNCTION GetDimmingTimeout: UInt8;
  340.     {$IFC NOT GENERATINGCFM}
  341.     INLINE $701D, $A09E, $1E80;
  342.     {$ENDC}
  343. PROCEDURE SetDimmingTimeout(timeout: ByteParameter);
  344.     {$IFC NOT GENERATINGCFM}
  345.     INLINE $101F, $4840, $303C, $001E, $A09E;
  346.     {$ENDC}
  347. PROCEDURE DimmingControl(enableSleep: BOOLEAN);
  348.     {$IFC NOT GENERATINGCFM}
  349.     INLINE $101F, $4840, $303C, $001F, $A09E;
  350.     {$ENDC}
  351. FUNCTION IsDimmingControlDisabled: BOOLEAN;
  352.     {$IFC NOT GENERATINGCFM}
  353.     INLINE $7020, $A09E, $1E80;
  354.     {$ENDC}
  355. FUNCTION IsAutoSlpControlDisabled: BOOLEAN;
  356.     {$IFC NOT GENERATINGCFM}
  357.     INLINE $7021, $A09E, $1E80;
  358.     {$ENDC}
  359. CONST
  360.     uppHDSpindownProcInfo = $000000C0; { PROCEDURE (4 byte param); }
  361.     uppSleepQProcInfo = $00131832; { Register FUNCTION (4 bytes in D0, 4 bytes in A0): 4 bytes in D0; }
  362.  
  363. FUNCTION NewHDSpindownProc(userRoutine: HDSpindownProcPtr): HDSpindownUPP;
  364.     {$IFC NOT GENERATINGCFM }
  365.     INLINE $2E9F;
  366.     {$ENDC}
  367.  
  368. FUNCTION NewSleepQProc(userRoutine: SleepQProcPtr): SleepQUPP;
  369.     {$IFC NOT GENERATINGCFM }
  370.     INLINE $2E9F;
  371.     {$ENDC}
  372.  
  373. PROCEDURE CallHDSpindownProc(VAR theElement: HDQueueElement; userRoutine: HDSpindownUPP);
  374.     {$IFC NOT GENERATINGCFM}
  375.     INLINE $205F, $4E90;
  376.     {$ENDC}
  377.  
  378. FUNCTION CallSleepQProc(message: LONGINT; qRecPtr: SleepQRecPtr; userRoutine: SleepQUPP): LONGINT;
  379.     {$IFC NOT GENERATINGCFM}
  380.     {To be implemented:  Glue to move parameters into registers.}
  381.     {$ENDC}
  382.  
  383. {$ALIGN RESET}
  384. {$POP}
  385.  
  386. {$SETC UsingIncludes := PowerIncludes}
  387.  
  388. {$ENDC} {__POWER__}
  389.  
  390. {$IFC NOT UsingIncludes}
  391.  END.
  392. {$ENDC}
  393.